Atomics API JavaScript-এ থ্রেড-সেফ অপারেশন করার জন্য বিভিন্ন methods প্রদান করে, যা SharedArrayBuffer এবং typed arrays-এ কাজ করে। Atomics এর এই মেথডগুলো atomic (অখণ্ড) অপারেশন পরিচালনা করতে ব্যবহৃত হয়। এখানে গুরুত্বপূর্ণ কিছু মেথডের বিস্তারিত আলোচনা করা হলো।
Atomics এর গুরুত্বপূর্ণ মেথডসমূহ
১. Atomics.get(typedArray, index)
- নির্দিষ্ট index থেকে একটি ডেটা রিড করে।
- এটি থ্রেড-সেফভাবে কাজ করে, অর্থাৎ, কোনো থ্রেড এর মান পরিবর্তন করার আগে এটি ডেটা রিড করতে পারে।
উদাহরণ:
const buffer = new SharedArrayBuffer(16);
const typedArray = new Int32Array(buffer);
typedArray[0] = 42;
const value = Atomics.get(typedArray, 0); // ডেটা রিড
console.log(value); // আউটপুট: 42
২. Atomics.set(typedArray, index, value)
- নির্দিষ্ট index এ একটি মান সেট করে।
- এটি থ্রেড-সেফ পদ্ধতিতে ডেটা আপডেট করতে ব্যবহৃত হয়।
উদাহরণ:
const buffer = new SharedArrayBuffer(16);
const typedArray = new Int32Array(buffer);
Atomics.set(typedArray, 0, 100); // ডেটা সেট
console.log(typedArray[0]); // আউটপুট: 100
৩. Atomics.add(typedArray, index, value)
- নির্দিষ্ট index এ একটি মান যোগ করে এবং পুরানো মানটি রিটার্ন করে।
- এটি সাধারণত increment বা accumulation করার জন্য ব্যবহৃত হয়।
উদাহরণ:
const buffer = new SharedArrayBuffer(16);
const typedArray = new Int32Array(buffer);
Atomics.set(typedArray, 0, 10); // প্রাথমিক মান
const oldValue = Atomics.add(typedArray, 0, 5); // 5 যোগ করা
console.log(oldValue); // আউটপুট: 10
console.log(typedArray[0]); // আউটপুট: 15
৪. Atomics.sub(typedArray, index, value)
- নির্দিষ্ট index থেকে একটি মান বিয়োগ করে এবং পুরানো মানটি রিটার্ন করে।
- এটি decrement করার জন্য ব্যবহার করা হয়।
উদাহরণ:
const buffer = new SharedArrayBuffer(16);
const typedArray = new Int32Array(buffer);
Atomics.set(typedArray, 0, 20);
const oldValue = Atomics.sub(typedArray, 0, 5); // 5 বিয়োগ করা
console.log(oldValue); // আউটপুট: 20
console.log(typedArray[0]); // আউটপুট: 15
৫. Atomics.increment(typedArray, index)
- নির্দিষ্ট index এ মান ১ দ্বারা বৃদ্ধি করে এবং পুরানো মানটি রিটার্ন করে।
- এটি মূলত একটি বিশেষায়িত add() অপারেশন।
উদাহরণ:
const buffer = new SharedArrayBuffer(16);
const typedArray = new Int32Array(buffer);
Atomics.set(typedArray, 0, 5);
const oldValue = Atomics.add(typedArray, 0, 1); // increment
console.log(oldValue); // আউটপুট: 5
console.log(typedArray[0]); // আউটপুট: 6
৬. Atomics.compareExchange(typedArray, index, expectedValue, replacementValue)
- যদি নির্দিষ্ট index এর মান expectedValue এর সমান হয়, তবে এটি replacementValue দিয়ে আপডেট করে।
- এটি conditional update করতে ব্যবহৃত হয়।
উদাহরণ:
const buffer = new SharedArrayBuffer(16);
const typedArray = new Int32Array(buffer);
Atomics.set(typedArray, 0, 10);
const oldValue = Atomics.compareExchange(typedArray, 0, 10, 20);
console.log(oldValue); // আউটপুট: 10
console.log(typedArray[0]); // আউটপুট: 20
৭. Atomics.exchange(typedArray, index, value)
- নির্দিষ্ট index এর পুরানো মানটি রিটার্ন করে এবং নতুন মান দিয়ে আপডেট করে।
- এটি ডেটা প্রতিস্থাপনের জন্য ব্যবহার করা হয়।
উদাহরণ:
const buffer = new SharedArrayBuffer(16);
const typedArray = new Int32Array(buffer);
Atomics.set(typedArray, 0, 50);
const oldValue = Atomics.exchange(typedArray, 0, 100);
console.log(oldValue); // আউটপুট: 50
console.log(typedArray[0]); // আউটপুট: 100
৮. Atomics.wait(typedArray, index, value, timeout)
- একটি থ্রেডকে অপেক্ষা করায় যতক্ষণ না নির্দিষ্ট index এর মান পরিবর্তিত হয় বা একটি নির্দিষ্ট সময় পেরিয়ে যায়।
- এটি synchronization এর জন্য গুরুত্বপূর্ণ।
উদাহরণ:
const buffer = new SharedArrayBuffer(16);
const typedArray = new Int32Array(buffer);
Atomics.set(typedArray, 0, 0);
setTimeout(() => {
Atomics.store(typedArray, 0, 1);
Atomics.notify(typedArray, 0); // অপেক্ষা করা থ্রেডকে জাগানো
}, 1000);
Atomics.wait(typedArray, 0, 0); // থ্রেড অপেক্ষা করবে যতক্ষণ না মান পরিবর্তন হয়
console.log("Value updated!");
৯. Atomics.notify(typedArray, index, count)
- একটি বা একাধিক থ্রেডকে জাগিয়ে তোলে, যারা wait() অবস্থায় রয়েছে।
উপসংহার
Atomics API-র এই মেথডগুলো multithreaded programming-এ shared memory ব্যবস্থাপনার জন্য অপরিহার্য। এগুলো thread-safe operations, synchronization, এবং data consistency নিশ্চিত করতে ব্যবহার করা হয়। বিশেষ করে, add(), compareExchange(), এবং wait() মেথডগুলো মাল্টি-থ্রেডিংয়ে খুব কার্যকর।
Read more